package fifth.static关键字;

/**
 * Java中常见内存区域：
 * ①栈内存空间：保存所有对象的名称（准确说就是保存了引用的堆内存空间的地址）
 * ②堆内存空间：保存每个对象的具体属性内容
 * ③全局数据区：保存static类型的属性
 * ④全局代码区：保存所有方法的定义
 */
class Person {
    private String name;
    private int age;

    static String country = "A城市";

    /*现在如果不想叫A城了 而且已经产生了无数多的对象 如何在一个一个修改这些对象的城市信息的情况下一次性修改呢
    此时只用把城市属性给static了 属性用static声明 将其变为公共属性
     */
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }


    public void info() {
        System.out.println("姓名：" + this.name + " 年龄：" + this.age + ",城市：" + this.country);

    }
};

public class case1 {
    public static void main(String[] args) {
        Person p1 = new Person("张三", 30);
        Person p2 = new Person("李四", 23);
        Person p3 = new Person("王五", 43);
        System.out.println("------------ 修改之前 -----------");
        p1.info();
        p2.info();
        p3.info();
        System.out.println("------------ 修改之后 -----------");
        // p1.country = "B城";
        Person.country = "B城";
        // 类的公共属性应该由类进行修改是最合适的 因为一个用户不知道一个类到底有多少对象产生
        // 所以上面的代码在访问static属性的时候最好可以由类名称直接调用 又会把static声明的属性用称为类属性
        p1.info();
        p2.info();
        p3.info();
    }
}
